Many types of information are commonly stored in the form of key-value pairs, where the “key” portion of the pair is a label, and the “value” portion of the pair provides a value associated with the label. For example, information about the configuration of a computer system may include the following key-value pair: (“memory”, 512M) to indicate that the amount of dynamic memory in the computer system is 512 megabytes.
Typically, a software program or system that needs to store large amounts of key-value pairs will include a repository for storing the information, and include logic for managing the repository. When such repositories are used for storing configuration data, the repositories are often referred to as registries.
When each program or system that requires a key-value pair repository implements and manages its own repository, the result is a proliferation of proprietary repositories and a massive duplication of work. To address this problem, key-value pair repository designers can expose an application programming interface (API) to their repository to allow certain third-party applications to make use of their repository. For example, an operating system may allow third-party applications designed for the operating system to store key-value pairs in the repository that is managed by the operating system.
Unfortunately, such “open” repositories do not provide a general solution because they are typically tied to a specific platform or storage subsystem, and are therefore not portable or useable as general-purpose key-value pair repositories. Because they are designed using certain assumptions about the environment and platform in which they will be used, they are generally not available for use by applications or systems that do not conform to those assumptions.